package com.example.backed.service;

import com.example.backed.dto.OrderCreateDTO;
import com.example.backed.dto.OrderQueryDTO;
import com.example.backed.entity.Order;
import com.example.backed.vo.PageVO;
import com.example.backed.vo.OrderStatsVO;
import java.util.List;

public interface OrderService {
    /**
     * 创建订单
     *
     * @param userId 用户ID
     * @param createDTO 创建订单请求
     * @return 订单信息
     */
    Order createOrder(Long userId, OrderCreateDTO createDTO);

    /**
     * 根据ID查询订单
     *
     * @param id 订单ID
     * @return 订单信息
     */
    Order getOrderById(Long id);

    /**
     * 根据订单编号查询订单
     *
     * @param orderNo 订单编号
     * @return 订单信息
     */
    Order getOrderByOrderNo(String orderNo);

    /**
     * 分页查询订单列表
     *
     * @param query 查询条件
     * @return 订单列表
     */
    PageVO<Order> getOrderList(OrderQueryDTO query);

    /**
     * 查询用户的订单列表
     *
     * @param userId 用户ID
     * @param query 查询条件
     * @return 订单列表
     */
    PageVO<Order> getUserOrderList(Long userId, OrderQueryDTO query);

    /**
     * 更新订单状态
     *
     * @param userId 用户ID
     * @param orderId 订单ID
     * @param status 订单状态
     * @return 是否更新成功
     */
    boolean updateOrderStatus(Long userId, Long orderId, Integer status);

    /**
     * 获取订单详情
     *
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 订单信息
     */
    Order getOrderDetail(Long userId, Long orderId);

    /**
     * 获取用户的订单列表
     *
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> getUserOrders(Long userId);

    /**
     * 取消订单
     *
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 是否取消成功
     */
    boolean cancelOrder(Long userId, Long orderId);

    /**
     * 删除订单
     *
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 是否删除成功
     */
    boolean deleteOrder(Long userId, Long orderId);

    /**
     * 获取订单统计信息
     *
     * @return 订单统计信息
     */
    OrderStatsVO getOrderStats();
} 